数据科学介绍
作者:刘以栋
首先声明一下,虽然我自己最近成天做数据分析,但是我不是数据科学专家。出于对数据科学的兴趣,我看了一些数据科学 (Data Science)方面的资料,这篇短文相当于我的读书笔记。
数据科学现在非常热门,所以我就看了这方面的一些入门书,看看它跟我们现在的数据分析有什么不一样。根据我的理解,数据科学是我们现在数据分析的超级集(Supper Set),即数据科学包含了我们的数据分析。从另一个角度,我们现在的数据分析是当前的数据科学,未来的数据科学将扩展我们现在的工作。
我们一般把软件工程师称为码工,因为他们写带码(Coding,Code 有密码的意思)。跟码工相对应,数据分析师叫矿工(Data Mining, Mining 就是采矿了)。数据分析师们努力从数据中寻找规律,所以叫矿工也比较合理。
我先介绍一下当前数据分析师的工作。为了不牵涉到我自己当前的工作信息,所以我在这里用大家都熟悉的汽车保险保费做例子。
我们开车,一般都需要买汽车保险,这也是政府要求。我们买保险时,各个人的保费是不一样的,因为这个保费是根据各个人的具体情况算出来的。
下面我们看,我们买汽车保险时,我们提供了那些信息。个人信息包括:年龄,性别,婚姻状况,有无孩子,教育程度,职业,社会安全号和家庭住址等信息。车的方面,包括车的新旧,大小和牌子等。
现在我们看看保险公司为什么需要这些信息。年龄方面,跟保费是 U 型关系,年龄小和年纪大的人,保费都高,中年人保费最低。年龄小的人易冲动,开车比较任性;年纪大的人反应迟钝,都容易出事。性别方面,女性开车比男性小心。婚姻方面,结过婚的人比较谨慎。有孩子的人比没有孩子的人谨慎。受过高等教育的人比没有受过高等教育的人开车谨慎,脑力劳动的人比体力劳动的人开车谨慎。
那么,为什么要社会安全好?这里有一个新发现,我一个朋友曾经参与其中,当然,这也是20年前的事情了。用社会安全好,可以查一个人的信用记录。开车为什么需要查信用记录,这又不是贷款?因为信用记录好的人,开车也谨慎。那些信用记录不好的人,开车也不守规矩。
家庭住址,为什么跟保费有关?因为美国人的社会地位是跟住址有关的。穷人住在穷人区,富人住在富人区,穷人保费高,虽然增加了穷人的负担,却也是保险公司的数据分析的结果。
有些信息,譬如人的种族,可能也跟开车出事率有关,但是政府不让用。
除了人的方面信息以外,还有车的信息。开新车的人保费高,一方面开新车的人小心,另一方面他们也容易索赔。旧车碰一下,没啥事就算了。另外旧车修也便宜。
车和人的信息以外,还有保险额度方面的考虑。保险额度高,自然保费也高。个人减免额度(Deduction)高,保费就低。
所有的这些信息和关系,都是保险公司里的人算出来的。算这些数据的人,叫精算师(Actuary)。这个行业,就是保险公司里面的保费研究部门(Research andDevelopment, Actuarial Science)。精算师需要线性代数,概率统计的知识,数据科学也需要。精算师需要做线性回归分析和逻辑回归(Logistic Regression)分析,数据科学家也需要。所以在这些方面,知识训练是重叠的。
现在让我们扩展一下数据科学家的领域。
第一、计算机
我们日常使用的计算机,叫个人计算机(Personal Computer, PC)。它为我们服务,我们指挥它做什么,它就做什么。
但是,在数据科学领域,因为数据量极其庞大,所以需要超级计算机功能,一个计算机一般不能处理这么多信息,所以要把很多计算机放在一起。像Google,Amazon 等公司,它们的主机可能由几万个计算机服务器(Computer Server)组成。
一个计算机,我们人直接管理就行了。成千上万个计算机,人管理不过来,所以要有新的计算机操作系统(譬如,Hadoop Distributed File System),把计算机分成管理计算机(NameNode)和干活计算机(DataNode)。管理计算机把活分给干活计算机,然后把干活计算机的结果汇总。如果哪个计算机中途停止工作了,那么要把它的工作转给其它干活计算机。如果管理计算机自己坏了,那么它的副手计算机接替工作。计算机相互之间通过心跳交流,确保各个计算机都在工作。
常用的应用例子是图书管理。一个房间的书,需要整理,如果一个人做,需要很多时间。如果几个人分开做,那么各个人把自己整理的图书汇总,然后可以按出版社,图书类型,出版日期,作者等进行分类。
有个笑话。生一个小孩,需要怀胎10个月。那么你可以找来5个女人,每个女人再加班加点,那么一个月你就可以生出一个孩子出来。
扩展一下这个笑话。如果你想生10个孩子,这可能需要你的老婆花10年时间。但是,你如果有5个老婆,那么两年就可以有10个孩子。这个并行计算的概念并不新鲜,但是现在的数据科学会加快并行计算的应用步伐。
第二、数据量
为什么我们需要许多计算机一起工作? 因为我们现在的信息量极其庞大。
我在中国上研究生时,我们单位的计算水平号称是全中国最强的。那时的计算机,功能有限,储存量也小。怎样提高算法的效率和结果精度,就是我们当时的研究方向。
那个时候,天气预报和石油勘探可以购买国外的超级计算机,但是只能用于天气预报和石油勘探,国外会定期派人来查,以防中国把超级计算机用于国防。现在中国的超级计算机好像非常厉害了,但是我没有跟踪。
而在现在,数据储存的需求已经不限制在数据了。图像,视频,声音等,都是现在的数据形式,当然也包括具体数据,譬如全中国人的信用记录。这么多的数据形式,需要大量的计算机功能来处理。计算量和储存量,都需要巨型计算机或者并行计算机。
我们日常使用的微信,腾讯肯定有巨大的数据储存系统支撑。
第三、计算机语言
世界上的人使用不同的语言,计算机也有不同的计算机语言。学过计算机的人,都知道好几种计算机语言,譬如 C, C++, Java, R, SAS, Python 等。
做计算机的人,把计算机语言分为初级语言,高级语言和宏语言等。计算机汇编语言就是初级语言,Fortran, C 等就是高级语言。R, SAS, Python 应该算宏语言(Macro Language)。宏语言的特点是别人已经把很多模块准备好了,你可以直接用别人的模块,不需要具体写那些模块,缺点是,你需要的功能,可能要通过几个模块来实现,效率差,还不如自己写模块。
现在Python是比较流行的数据科学和人工智能语言,我自己也正在学Python。我认为Python 的优势是它提供了一个平台,比较容易调用其它软件的模块和功能。
第四、人工智能
数据科学要处理大量数据,许多时候人的精力不能应付这些要求,所以人工智能在数据科学里面就会有应用前景。
人工智能听起来高大上,但我认为它被过度神话。这里我想用简单的数学例子解释一下人工智能。
譬如,我需要解方程, 5X=3. 两边除以5,X=3/5, 或者 X=0.6.
写成一般形式,aX=b, 如果 a 不等于0, X=b/a. 仍然很简单。
现在我们再往前走一步,A 是一个矩阵,X 和 b 都是向量,方程就是,
AX=b , X=(x1, x2).
如果矩阵是(100, 0; 0, 0.0001), b=(2,1), 那么 x1=0.02, x2=10000.
你说,这也很简单,没有问题。但是,如果 b 是观察来的数据,含有误差,你还相信 得到的解吗?
在实际应用中,我们一般不会直接解方程,AX=b.
我们解下面的优化问题,
g(x)=|| AX-b|| + w*f(X)
这里我们包含了许多内容在这里。
把解方程问题转为优化问题,找 g(x) 的最小值。g(x) 被称为目标函数(Object Function)。
第一部分是解方程误差的数学形式,它甚至可以是非线性关系。
第二部分是应用限制,使得结果更合理 (Regularization)。
加权w 在这里调整我们对目标结果的要求。W 大,对粘合数据要求就低。W 小,则需要尽量满足方程。
解这个优化问题,本身就是一个数值最优化的研究领域。我认为人工智能以后在这方面会有很多发展。
人工智能的书里,都提到最速梯度法(Gradient Descent) 方法,它只是解上面优化问题的方法之一。我以前做反问题(Inverse Problems) 的研究工作,就是要寻找解这种优化方法。
人工智能方法,就是让计算机找不同的加权,在输入结果X 和观察到的 数据b 之间建立联系。用现在的统计方法,这种联系是看得见,摸得着的,也容易解释。人工智能和神经网络方法,就是让计算机自己寻找输入和输出之间的关系,减少了人力,但是也失去了变量和结果之间的直接关系。
第五、数据处理
我刚开始学统计时,我们的教授说,数据对做统计的人来说,就像工资对一个工人一样重要: 越多越好,永远也不会嫌多。
要做数据科学,首先要收集数据,然后要处理数据,对数据做验证和清洗。在这个过程中,统计知识非常重要。
如果你把数据中你不喜欢的数据都踢掉,那么你可以得到任何你想要的结果。所以马克-吐温有一句名言,谎言有三种: 谎言,恶意的谎言和统计结果。
如果数据质量不好,那么结果也就不可靠。业内人士说,如果是垃圾进来,那么最后就是垃圾出去(Garbage In and Garbage Out)。我学数值分析时,我们的教授说,我们算出来的结果精度,永远不会高于我们输入数据的精度。
验证数据时,要严格检查数据的收集过程,看看数据选择是不是随机客观的。
结语
结束本文以前,我想做一个简单小结。
数据科学是一个交叉学科,它包括统计,计算机编程和数据结果解释,所以需要数学,统计和计算机软件方面的技能。有人开玩笑说,数据科学家比统计学家会编程序,比软件工程师懂统计。
在庞大的数据科学里面,一个人可以做一个小而全的数据科学家,什么都懂一些,什么都不深;也可以做某方面的专家,深入其中的一个领域。
数据科学包括硬功夫,譬如数据处理和编程能力,也需要软功夫,如交流能力。这种交流能力包括听懂客户的需求能力和解释数据分析结果的能力。用简单的通俗语言,解释复杂的工作问题,是一种重要的沟通能力。我们做理工的人,都要学会与不同背景的人交流,包括我自己。
做数据科学的人,必须喜欢数据,并且善于理解数据。如果不喜欢数据,那么最好不要做这方面工作。
不管我们以后是否做数据科学家,但是我们以后都需要了解数据科学。以后在我们的生活中,我们都需要面对数据科学家产生出来的结果做决策。而许多数据科学家,都不善于跟文科生和经理们交流。他们生活在自己的世界里。
相关阅读:
作者:刘以栋,系美国资深金融分析师,笔耕不辍的他,业余爱好阅读,写作;他撰写的金融类点评,教育类资讯和感悟,常在国内外各类报刊媒体刊发,让多人受益。本文经作者授权发表,版权归属作者和本号联合所有。
喜欢本文?欢迎关注/置顶/点赞/加入留学家长公益交流社群: